{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Prioritiesed Experience Replay DQN\n",
    "**Paper**: [Prioritized Experience Replay](https://arxiv.org/pdf/1511.05952.pdf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The autoreload extension is already loaded. To reload it, use:\n",
      "  %reload_ext autoreload\n"
     ]
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import gym\n",
    "\n",
    "\n",
    "from src.utils.Config import Config\n",
    "from src.utils.Logging import Logger\n",
    "from src.components.memory import PrioritiesedReplayBuffer, ReplayBuffer\n",
    "from src.networks.models import QNetwork\n",
    "\n",
    "from src.utils.misc import train, watch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "env: \t\tEnvSpec(CartPole-v1)\n",
      "win condition: \t195.0\n",
      "state space\t(4,)\n",
      "action space\t2\n",
      "device: \tcpu\n",
      "seed: \t\t123456789\n",
      "n_episodes: \t1500\n",
      "max_t: \t\t1000\n",
      "eps_start: \t1.0\n",
      "eps_end: \t0.01\n",
      "eps_decay: \t0.995\n",
      "eps_greedy: \tTrue\n",
      "noisy: \t\tFalse\n",
      "tau: \t\t0.001\n",
      "gamma: \t\t0.99\n",
      "lr: \t\t0.0005\n",
      "memory: \t<class 'src.components.memory.PrioritiesedReplayBuffer'>\n",
      "batch_size: \t64\n",
      "buffer_size: \t100000\n",
      "lr_annealing: \tFalse\n",
      "learn_every: \t4\n",
      "double_dqn: \tTrue\n",
      "model: \t\t<class 'src.networks.models.QNetwork'>\n",
      "save_loc: \tNone\n",
      "Logging at: logs/CartPole-v1/experiment-2020-04-16_16_16_51\n"
     ]
    }
   ],
   "source": [
    "config = Config()\n",
    "\n",
    "config.env = gym.make('CartPole-v1')\n",
    "\n",
    "config.n_episodes = 1500\n",
    "config.win_condition = 195.0\n",
    "config.memory = PrioritiesedReplayBuffer\n",
    "config.model = QNetwork\n",
    "config.double_dqn = True\n",
    "config.print_config()\n",
    "\n",
    "logger = Logger(config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epi: 100\tAverage Score: 19.0400\tMean: 10.0000\tDuration: 0.0362\t#t_s: 9.0000\n",
      "Epi: 200\tAverage Score: 13.4300\tMean: 10.0000\tDuration: 0.0312\t#t_s: 9.00000\n",
      "Epi: 300\tAverage Score: 11.3300\tMean: 8.0000\tDuration: 0.0269\t#t_s: 7.000000\n",
      "Epi: 400\tAverage Score: 10.6300\tMean: 8.0000\tDuration: 0.0524\t#t_s: 7.000000\n",
      "Epi: 500\tAverage Score: 10.0800\tMean: 9.0000\tDuration: 0.0256\t#t_s: 8.000000\n",
      "Epi: 600\tAverage Score: 9.6900\tMean: 9.0000\tDuration: 0.0318\t#t_s: 8.0000000\n",
      "Epi: 700\tAverage Score: 10.0700\tMean: 9.0000\tDuration: 0.0311\t#t_s: 8.000000\n",
      "Epi: 800\tAverage Score: 11.0300\tMean: 9.0000\tDuration: 0.0249\t#t_s: 8.000000\n",
      "Epi: 900\tAverage Score: 13.4100\tMean: 22.0000\tDuration: 0.0671\t#t_s: 21.0000\n",
      "Epi: 1000\tAverage Score: 17.6200\tMean: 11.0000\tDuration: 0.0352\t#t_s: 10.00000\n",
      "Epi: 1100\tAverage Score: 24.4800\tMean: 51.0000\tDuration: 0.1539\t#t_s: 50.000000\n",
      "Epi: 1200\tAverage Score: 156.4300\tMean: 225.0000\tDuration: 0.6873\t#t_s: 224.0000\n",
      "Epi: 1223\tAverage Score: 195.4000\tMean: 278.0000\tDuration: 0.9316\t#t_s: 277.0000\n",
      "Environment Solved in 129.2686 seconds !\n"
     ]
    }
   ],
   "source": [
    "train(config, logger)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x12307b198>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(logger.score)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Vanilla"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "env: \t\tEnvSpec(CartPole-v1)\n",
      "win condition: \t195.0\n",
      "state space\t(4,)\n",
      "action space\t2\n",
      "device: \tcpu\n",
      "seed: \t\t123456789\n",
      "n_episodes: \t2000\n",
      "max_t: \t\t1000\n",
      "eps_start: \t1.0\n",
      "eps_end: \t0.01\n",
      "eps_decay: \t0.995\n",
      "eps_greedy: \tTrue\n",
      "noisy: \t\tFalse\n",
      "tau: \t\t0.001\n",
      "gamma: \t\t0.99\n",
      "lr: \t\t0.0005\n",
      "memory: \t<class 'src.components.memory.ReplayBuffer'>\n",
      "batch_size: \t64\n",
      "buffer_size: \t100000\n",
      "lr_annealing: \tFalse\n",
      "learn_every: \t4\n",
      "double_dqn: \tTrue\n",
      "model: \t\t<class 'src.networks.models.QNetwork'>\n",
      "save_loc: \tNone\n",
      "Logging at: logs/CartPole-v1/experiment-2020-04-16_16_19_01\n"
     ]
    }
   ],
   "source": [
    "config = Config()\n",
    "\n",
    "config.env = gym.make('CartPole-v1')\n",
    "\n",
    "config.win_condition = 195.0\n",
    "config.memory = ReplayBuffer\n",
    "config.model = QNetwork\n",
    "config.double_dqn = True\n",
    "config.print_config()\n",
    "\n",
    "logger = Logger(config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epi: 100\tAverage Score: 23.0600\tMean: 13.0000\tDuration: 0.0168\t#t_s: 12.00000\n",
      "Epi: 200\tAverage Score: 13.8700\tMean: 11.0000\tDuration: 0.0213\t#t_s: 10.0000\n",
      "Epi: 300\tAverage Score: 11.8500\tMean: 8.0000\tDuration: 0.0110\t#t_s: 7.000000\n",
      "Epi: 400\tAverage Score: 11.1700\tMean: 9.0000\tDuration: 0.0129\t#t_s: 8.000000\n",
      "Epi: 500\tAverage Score: 11.2300\tMean: 9.0000\tDuration: 0.0137\t#t_s: 8.000000\n",
      "Epi: 600\tAverage Score: 10.8400\tMean: 17.0000\tDuration: 0.0239\t#t_s: 16.0000\n",
      "Epi: 700\tAverage Score: 12.5000\tMean: 18.0000\tDuration: 0.0259\t#t_s: 17.0000\n",
      "Epi: 800\tAverage Score: 13.5200\tMean: 9.0000\tDuration: 0.0155\t#t_s: 8.000000\n",
      "Epi: 900\tAverage Score: 22.4000\tMean: 44.0000\tDuration: 0.0633\t#t_s: 43.000000\n",
      "Epi: 1000\tAverage Score: 78.9900\tMean: 232.0000\tDuration: 0.3714\t#t_s: 231.0000\n",
      "Epi: 1035\tAverage Score: 196.8400\tMean: 287.0000\tDuration: 0.4187\t#t_s: 286.0000\n",
      "Environment Solved in 52.9542 seconds !\n"
     ]
    }
   ],
   "source": [
    "train(config, logger)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1235529e8>]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(logger.score)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
